#ifndef __DOUBLELINKLIST_H_
#define __DOUBLELINKLIST_H_
#define ElementType int

typedef struct Node
{
    ElementType data;
    struct Node *next;
    struct Node *prev;
}Node;
struct DoubleLinkListPrivate;
class DoubleLinkList
{
public:
    DoubleLinkList();
    void InsertTail(ElementType element);//双链表的尾插法
    void InsertHead(ElementType element);//双链表的头插法
    int FindFirstByElement(ElementType element);//寻找双链表中与element第一个匹配的，并返回其位置
    void RemoveByIndex(int index);//按位置删除双链表
    void RemoveByElement(ElementType element);//按值删除双链表
    void DLTrave(void (*func)(ElementType));//双链表的遍历(回调函数)
    int GetListLen();// 获取链表长度
    ~DoubleLinkList();
private:
    DoubleLinkListPrivate *list;
};

#endif